<?php

namespace app\common\model;

use think\facade\Db;

/**
 * 成果管理操作公共类
 * 
 * 时间 ： 2020年4月18日00:18:03
 * 作者 ： 夏立军
 */
class AchievementModel
{

    // classify ==========================================================================================
    /**
     * 获取所有已启用并已经存在的数据表的成果
     * @return 返回结果
     */
    public function get_achievement_list_flag_to_2()
    {
        $classify_res = Db::name('classify')->where('issue', 1)->where('flag', 2)->select();
        return $classify_res;
    }

    /**
     * 通过 id 获取一条记录的信息
     * @param $id 分类ID
     * @return 返回一条分类的数据
     */
    public function get_classify_info_by_id(int $id)
    {
        return Db::name('classify')->where('id', $id)->find();
    }


    // classify_table ==========================================================================================

    /**
     * 通过 cid 获取中间表内容数据 并解析其内容
     * @param $cid 成果分类ID
     * @return 中间表所有内容
     */
    public function get_achievement_classify_table_info_by_cid(int $cid)
    {
        $res = Db::name('classify_table')->where('cid', $cid)->find();
        if (!$res) {
            return false;
        }
        $res['table_content'] = json_decode($res['table_content'], true);
        return $res;
    }

    /**
     * 通过 id 获取中间表内容数据 并解析其内容
     * @param $id 成果分类ID
     * @return 中间表所有内容
     */
    public function get_achievement_classify_table_info_by_id(int $id)
    {
        $res = Db::name('classify_table')->where('id', $id)->find();
        if (!$res) {
            return false;
        }
        $res['table_content'] = json_decode($res['table_content'], true);
        return $res;
    }


    // classify_table_*** ==========================================================================================

    /**
     * 直接获取所有的用户数据
     * @param $table_name 数据表表名
     * @return 返回所有用户的录入的所有数据
     */
    public function get_achievement_classify_table_other_all_info_by_tableName(string $table_name)
    {
        try {
            $res = Db::table($table_name)->select();
        } catch (\Throwable $th) {
            return false;
        }
        return $res;
    }

    /**
     * 通过UserID查询某一张表中所有数据
     * @param $table_name 数据表表名
     * @param $uid 用户ID
     * @return 返回当前用户的录入的所有数据
     */
    public function get_achievement_classify_table_other_info_by_tableName_and_uid(string $table_name, int $uid)
    {
        try {
            $res = Db::table($table_name)->where('uid', $uid)->select();
        } catch (\Throwable $th) {
            return false;
        }
        return $res;
    }

    /**
     * 查询某一张表中指定状态的数据
     * @param $table_name 数据表表名
     * @param $uid 用户ID
     * @param $status 指定状态
     * @return 返回当前用户的录入的所有数据
     */
    public function get_achievement_classify_table_other_info_by_tableName_and_uid_and_status(string $table_name, int $uid, int $status)
    {
        try {
            $res = Db::table($table_name)->where('uid', $uid)->where('status', $status)->select();
        } catch (\Throwable $th) {
            return false;
        }
        return $res;
    }

    /**
     * 查询某一张表中指定状态的数据
     * @param $table_name 数据表表名
     * @param $uid 用户ID
     * @param $status 指定状态
     * @return 返回当前用户的录入的所有数据 
     */
    public function get_achievement_classify_table_other_info_by_tableName_and_status(string $table_name, int $status)
    {
        try {
            $res = Db::table($table_name)->where('status', $status)->select();
        } catch (\Throwable $th) {
            return false;
        }
        return $res;
    }

    /**
     * 查询某一张表中所有数据的数量
     * @param $table_name 数据表表名
     * @param $uid 用户ID
     * @return 返回当前用户的录入的所有数据的数量
     */
    public function get_achievement_classify_table_other_info_by_tableName_and_uid_count(string $table_name, int $uid)
    {
        try {
            $res = Db::table($table_name)->where('uid', $uid)->count();
        } catch (\Throwable $th) {
            return false;
        }
        return $res;
    }

    /**
     * 查询某一张表中所有数据 分页显示
     *
     * @param $table_name 数据表表名
     * @param $uid 用户ID 
     * @param $offset 获取数据的开始位置
     * @param $size   获取数据的条数
     * @return 获取到的所有项目
     */
    public function get_achievement_classify_table_other_info_page(string $table_name, int $uid, int $offset, int $size = 10)
    {
        try {
            $res = Db::table($table_name)->where('uid', $uid)->limit($offset, $size)->select();
        } catch (\Throwable $th) {
            return false;
        }
        return $res;
    }

    /**
     * 给某一张表 添加一条数据
     * 
     * @param $table_name 需要添加的表名
     * @param $data 添加的数据
     * @return 添加的结果
     */
    public function set_achievement_info_by_data(string $table_name, array $data)
    {
        try {
            $res = Db::table($table_name)->save($data);
        } catch (\Throwable $th) {
            return false;
        }
        return $res;
    }

    /**
     * 删除一条指定的成果
     * 
     * @param $pid 分类ID
     * @param $id 成果ID
     * @return 是否删除成功
     */
    public function del_achievement_info(int $pid, int $id)
    {
        try {
            $classify_table_info = Db::name('classify_table')->where('id', $pid)->find();
            Db::table($classify_table_info['table_name'])->where('id', $id)->delete();
        } catch (\Throwable $th) {
            return false;
        }
        return true;
    }

    /**
     * 获取指定的一条数据
     * 
     * @param $table_name 表名
     * @param $id ID
     * @return 返回的数据
     */
    public function get_achievement_info_by_id(string $table_name, int $id)
    {
        try {
            $res = Db::table($table_name)->where('id', $id)->find();
        } catch (\Throwable $th) {
            return false;
        }
        return $res;
    }

    /**
     * 修改一条指定的数据
     * 
     * @param $table_name 表名
     * @param $id 准备要修改的 ID
     * @param array $data 要修改的数据
     * @return 是否修改完成
     */
    public function set_achievement_info(string $table_name, int $id, array $data)
    {
        try {
            Db::table($table_name)->where('id', $id)->save($data);
        } catch (\Throwable $th) {
            return false;
        }
        return true;
    }

    /**
     * 获取指定表中的已提交审核的数据
     * 
     * @param $table_name 表名
     * @return 所有数据
     */
    public function get_achievement_classify_table_other_info_by_tableName(string $table_name)
    {
        try {
            $res = Db::table($table_name)->where('status', 1)->select();
        } catch (\Throwable $th) {
            return false;
        }
        return $res;
    }

    /**
     * 获取指定表中的已提交审核的数据的总数
     * 
     * @param $table_name 表名
     * @return 所有数据
     */
    public function get_achievement_classify_table_other_info_by_tableName_count(string $table_name)
    {
        try {
            $res = Db::table($table_name)->where('status', 1)->count();
        } catch (\Throwable $th) {
            return false;
        }
        return $res;
    }

    /**
     * 获取指定表中的已提交审核的数据
     *      并解析出用户名以及对应的数量
     * 
     * @param $table_name 表名
     * @param $uid 用户ID
     */
    public function get_achievement_classify_table_other_info_and_count_by_tableName_and_uid(string $table_name, int $uid)
    {
        try {
            $res = Db::table($table_name)->alias('table_name')
                ->join(['ams_user' => 'u'], 'table_name.uid=u.id')
                ->field('table_name.*,u.name as user_name')
                ->where('uid', $uid)
                ->where('status', 1)
                ->select();
        } catch (\Throwable $th) {
            return false;
        }
        return $res;
    }

    /**
     * 通过指定的表名，修改成果的信息
     * 
     * @param $table_name 表名
     * @param $uid 用户ID
     * @param $id  成果ID
     * @param $data 成果信息
     *  [  0"提交"   1"已提交"   2"已审核"   3"驳回"   4"已完成" ]
     */
    public function set_achievement_classify_table_status_by_tableName_and_uid_and_id(string $table_name, int $uid, int $id, array $data)
    {
        try {
            Db::table($table_name)
                ->where('uid', $uid)
                ->where('id', $id)
                ->save($data);
        } catch (\Throwable $th) {
            return false;
        }
        return true;
    }

    /**
     * 获取指定表中的数据
     *    1. UID 用户ID
     *    2. audit_id 审核人ID
     * 
     * @param $table_name   表名
     * @param $uid          用户ID
     * @param $audit_id     审核人ID
     * @return 返回所有的结果
     */
    public function get_classify_table_other_info_by_tableName_and_uid_and_auditId(string $table_name, int $uid, int $audit_id)
    {
        try {
            $res = Db::table($table_name)->alias('table_name')
                ->join(['ams_user' => 'u'], 'table_name.uid=u.id')
                ->field('table_name.*,u.name as user_name')
                ->where('uid', $uid)
                ->where('audit_id', $audit_id)
                ->select();
        } catch (\Throwable $th) {
            return false;
        }
        return $res;
    }

    /**
     * 获取指定表中的数据
     *    1. UID 用户ID
     *    2. audit_id 审核人ID
     *    3. status 状态
     * 
     * @param $table_name   表名
     * @param $uid          用户ID
     * @param $audit_id     审核人ID
     * @param $status       需要获取的状态
     * @return 返回所有的结果
     */
    public function get_classify_table_other_info_by_tableName_and_uid_and_auditId_and_status(string $table_name, int $uid, int $audit_id, int $status)
    {
        try {
            $res = Db::table($table_name)->alias('table_name')
                ->join(['ams_user' => 'u'], 'table_name.uid=u.id')
                ->field('table_name.*,u.name as user_name')
                ->where('uid', $uid)
                ->where('audit_id', $audit_id)
                ->where('status', $status)
                ->select();
        } catch (\Throwable $th) {
            return false;
        }
        return $res;
    }
}
